using System;

namespace Tarkin.InfrastructureLibrary.Tests.Core.Basic.TestUtilities.ConcreteClasses
{
    /// <summary>
    /// The ConcreteTypedElement is a utility class intented to make working with Tarkin easier.
    /// Due to C#'s lack of support for multiple inheritance a number of Tarkin classes simulate
    /// inheriting from the Tarkin.InfrastructureLibrary.Core.Basic.TypedElement using containment.
    /// As such, these classes all take constructor parameters of type TypedElement. This class
    /// allows for a concrete implementation of TypedElement to pass to these constructors.
    /// </summary>
    internal class ConcreteTypedElement : Tarkin.InfrastructureLibrary.Core.Basic.TypedElement
    {

#region Constructors

        /// <summary>
        /// Default constructor.
        /// </summary>
        public ConcreteTypedElement () : base ()
        { }

        /// <summary>
        /// Overloaded constructor.
        /// </summary>
        /// <param name="name">Name of the TypedElement.</param>
        public ConcreteTypedElement ( string name ): base ( name )
        { }

        /// <summary>
        /// Overloaded constructor.
        /// </summary>
        /// <param name="type">The Type of the TypedElement.</param>
        public ConcreteTypedElement ( Tarkin.InfrastructureLibrary.Core.Basic.Type type ) : base ( type )
        { }

        /// <summary>
        /// Overloaded constructor.
        /// </summary>
        /// <param name="name">The name of the TypedElement.</param>
        /// <param name="type">The Type of the TypedElement.</param>
        public ConcreteTypedElement ( string name, Tarkin.InfrastructureLibrary.Core.Basic.Type type ) : base ( name, type )
        { }

#endregion

    }
}
